<div class="m-page-title">
	<h2 class="u-tt u-tt-lg">构造app</h2>
</div>
<div class="m-callout m-callout-warning">
	<p>
	所有系统功能均存放在apps目录中，一个目录为一个功能，建议把一个完整功能作为一个独立的APP，当然这不是必须的，比如你可以创建一个可扩展的APP通过api方法来继续扩展。
	</p>
</div>
<div class="u-text">必要结构</div>
<div class="m-highlight">
<pre class="prettyprint">
//示例app名为test，目录为在apps/test
apps   
  └ test   // 后台模块
	 ├ controller   // 控制器
	 ├ model   // 模型
	 ├ view   // 模板
	 ├ testapi.php   // API文件，前缀请与文件夹名称一致
	 └ config.php   // APP配置

//URL构造
index.php?r=APP名/控制器名/方法名

//你也可以使用函数生成URL
url('APP名/控制器名/方法名',可选参数数组);

//代码基本说明
类名请使用驼峰构造首字母大写且中括号换行
方法名使用驼峰构造首字母小写为动词中括号换行
函数请使用全小写，单词使用_进行分割
文件夹与文件(除类名驼峰)其他使用全小写
api文件与文件夹保持一致命名所谓为小写多单词使用_分割，如adminApi.php
注释使用规范注释，推荐使用CoolFormat来格式化代码，便于阅读
</pre>
</div>
<div class="u-text">APP配置</div>
<div class="m-highlight">
<pre class="prettyprint">
//config.php 预设参数
&lt;?php
return array(
	'APP_STATE' => 1, //APP状态 1为启用 0为禁用，分享时请更改为0
	'APP_NAME' => '测试APP', //APP名称
	'APP_VER' => '20140111', //APP创建日期也为版本号
	'APP_AUTHOR' => 'Life', //APP作者名称
	'APP_ORIGINAL_PREFIX' => 'dux_', //APP数据所使用的前缀，便于分享后转换前缀
	'APP_TABLES' => '', //APP所使用的数据表，请勿修改系统自带表，请使用新的关系表
	'APP_DESCRIPTION' => '这是一个测试APP', //APP功能描述
	'APP_SYSTEM' => 0, //是否保留APP，保留APP无法进行状态更改与卸载操作
	'APP_INSTALL' => 1 //APP是否安装，分享时请更改为0
);
</pre>
</div>
<div class="u-text">控制器基本说明</div>
<div class="m-highlight">
<pre class="prettyprint">
//您可以继承其他控制器，该控制器可为同目录下或者protected/base/controller的，建议把通用多个APP的控制器放入protected目录中的控制器，默认有控制器Admin(通用于后台)，Base(通用与前台或者其他)，通用方法可以参考Admin控制器
&lt;?php
/**
 * IndexController.php
 * 测试页面
 * @author Life <349865361@qq.com>
 * @version 20140110
 */
class IndexController extends AdminController
{
	/**
	 * 控制器方法
	 */
	public function index()
	{
		echo 'hello world!';
		
		//执行模型操作
		model('模型名')->模型内方法(参数);
		
		//输出模板(包含公共模板，如js、css加载)该方法仅针对admin继承类
		$this->show();
		
		//输出模板(不含公共模板)
		$this->dispaly();
		
		//输出消息，自动判断ajax操作
		$this->msg('消息内容',bool);
		
		//输出消息，ajax
		$this->ajaxMsg('内容', bool);
		
		//输出消息，页面类型
		$this->pageMsg('标题', '内容', bool);
	}
}
</pre>
</div>
<div class="u-text">模型基本说明</div>
<div class="m-highlight">
<pre class="prettyprint">&lt;?php
/**
 * AppDataModel.php
 * 系统功能管理
 * @author Life <349865361@qq.com>
 * @version 20140111
 */
class AppDataModel extends BaseModel
{
	//设置当前模型所使用的数据表，不含前缀
	protected $table = 'test';
	/**
	 * 模型方法
	 */
	public function getData()
	{
		//查询单条数据
		$this->find('查询条件，可为数组', '需要查询的字段', '排序');
		
		//查询多条数据
		$this->select('查询条件', '需要查询的字段', '排序', '条数');
		
		//统计
		$this->count('条件可为sql条件或者数组');
		
		//插入数据
		$this->insert('插入数据的数组');
		
		//更新数据
		$this->update('更新条件', '插入数据的数组');
		
		//删除数据
		$this->delete('删除条件');
		
		//多表查询
		$this->model
			->table('表名','别名')
			->join('表名','别名',关系条件)
			->innerJoin('表名','别名',关系条件)
			->leftJoin('表名','别名',关系条件)
			->rightJoin('表名','别名',关系条件)
			->fullJoin('表名','别名',关系条件)
			->field('查询字段')
			->where('查询条件')
			->order('排序')
			->limit('条数')
			->select();
			
		//也可以使用CanPhp的原始数据查询，这样不会写入系统安全记录内。
	}
}
</pre>
</div>
<script>
Do.ready('prettify',function() {
	prettyPrint();
});
</script>